package third;

import org.springframework.web.multipart.MultipartFile;

/**
 * \* User: MeiZhongHao
 * \* Date: 2019-04-11
 * \* Time: 09:38
 * \* Description:
 * \
 */
public abstract class AbstractHttpClient {


    /***
     * 入参映射 根据映射组装请求头与入参和请求路径 【关系映射】
     * @return
     */
    public <T extends AbstractParam> HttpParam paramMapping(T object, AppConf third, MultipartFile file){
        //
        HttpParam param = new HttpParam();
        param.setFile(file);
        // do json path
        return null;
    };

    /***
     * 参数验证
     * @param httpParam
     * @return
     */
    public void validate(HttpParam httpParam) {
    }

    /***
     * 加密
     * @param param
     * @return
     */
    public void encrypt(HttpParam param) {
        // 加密 【加密参数映射，加密后参数存储地址】
    }

    /***
     * 请求
     * @param param
     * @return
     */
    public void call(HttpParam param) {
        // 根据请求路径分析请求头与请求方式
    }

    /***
     * 解密
     * @param param
     * @return
     */
    public void decrypt(HttpParam param) {
        // 解密 【解密参数映射，解密后参数存储地址】
    }

    /***
     * 解析
     * @param param
     * @return
     */
    public void analyze(HttpParam param) {
        // 解析返回值
    }

    public HttpParam request(AbstractParam object, AppConf third, MultipartFile file) {
        HttpParam param = paramMapping(object, third, file);
        validate(param);
        encrypt(param);
        call(param);
        decrypt(param);
        analyze(param);
        return param;
    }

}